Utiliser les Dev Containers
Présentation
Qui n’as pas ragé d’avoir perdu du temps sur un projet à cause d’une configuration un peu compliquée à intégrée dans son workflow ?
Heureusement, il existe une fonctionnalité de Visual Studio Code qui permet de rapidement mettre en place un environnement de développement personnalisés, le tout fonctionnant avec Docker.
Cette fonctionnalité permet de décrire dans un fichier .json une architecture d’application, et de lancer un agent VsCode à l’intérieur. Vous pourrez ainsi développer dans votre conteneur Docker sans dépendre de l’environnement de votre machine.
Cette fonctionnalité est assez pratique si vous devez partager le même environnement de développement entre développeurs, et cela permet à une nouvelle personne arrivant dans l’équipe d’être opérationnel sans avoir la phase “mise en place de l’environnement de développement”. De plus, cela vous offre la possibilité d’avoir un environnement très proche de votre environnement de production, ce qui réduit la chance d’avoir des problèmes non detectés en amont sur votre CI.
Pré-requis
Pour pouvoir utiliser cette fonctionnalité, vous aurez besoin de 3 choses :
- Visual Studio Code (oui oui…)
- Docker
- L’extension
Dev Containers
Utilisation
Pour utiliser les Dev Containers c’est très simple, il suffit d’ajouter un dossier .devcontainer à la racine de votre projet avec un fichier .devcontainer.json à l’intérieur.
La structure ressemble à ceci :
{
"name": "Alpine",
"image": "mcr.microsoft.com/devcontainers/base:alpine-3.17",
"features": {
"ghcr.io/devcontainers-contrib/features/mysql-homebrew:1": {}
}
}Vous pouvez également utiliser l’assistant de création en utilisant les raccourcis CMD + SHIFT + P et en sélectionnant Add Dev Container Configuration Files. Cet assistant vous permet de choisir votre image de base puis d’y ajouter des fonctionnalités. Par exemple, si vous voulez un conteneur Ubuntu avec Terraform installé à l’intérieur.
Création de son conteneur
Comme nous l’avons fait remarqué au-dessus, il y a plusieurs moyen de créer son Dev Container. On peut fournir un fichier Dockerfile qui sera buildé, ou bien nous pouvons utiliser les images fournies par Microsoft auxquelles nous pouvons y ajouter des options.
La manière la plus simple revient à la deuxième méthode. Cependant, il arrive assez souvent certaines incompatibilité. J’ai eu régulièrement des erreurs de compatibilité en choississant un OS avec une version spécifique (par exemple Debian 10) car les extensions ne sont pas toujours maintenues pour tout les OS. Globalement, la plupart des extensions sont compatibles si vous utilisez la dernière LTS Ubuntu comme image de base. En cas de question, reportez-vous au github de l’extension concernés pour avoir plus d’informations sur la compatibilité.
Création d’un environnement complet
Mais parfois (souvent), il est préférable de pouvoir configurer soi-même son conteneur, afin d’ajuster au mieux sa configuration comme l’ajout de dépendances avec des versions spécifiques, ou l’intégration de certains fichiers de configuration. Le plus simple est d’utiliser un Dockerfile. Dans ce cas, votre fichier ressemblera à ceci :
{
"build": { "dockerfile": "Dockerfile" },
}Utilisation de Docker-Compose
Vous avez également la possibilité d’utiliser docker-compose afin de déployer des dépendances à votre application. L’exemple le plus parlant et le plus courant est le lancement d’une base de données.
{
"build": { "dockerfile": "Dockerfile" },
}Aller plus loin
Cette petite fiche vous as présenté les possibilités que vous pouvez faire avec les DevContainers, mais il y a de nombreuses façon de les utiliser pour faciliter et optimiser votre quotidien. Je vous conseil vivement de les utiliser, vous ne pourrez plus vous en passer par la suite.
Vous pouvez trouver plus de documentations sur le site de Microsoft Site dédié Documentation VSCode
